Docker 권한 및 Docker in Docker (DinD) 심화 설정

1. Docker 권한 문제 해결

1.1 Jenkins 컨테이너 내부 권한 설정

# root 권한으로 Jenkins 컨테이너 접속
docker exec -it --user root jenkins bash

# 필요한 패키지 설치 및 권한 설정
apt-get update
apt-get install -y sudo
groupadd -f docker
usermod -aG docker jenkins

# 컨테이너 나가기
exit

# Jenkins 컨테이너 재시작
docker restart jenkins

1.2 호스트 시스템 Docker 소켓 권한 설정

# Docker 소켓 권한 변경
sudo chmod 666 /var/run/docker.sock

2. Docker in Docker (DinD) 상세 설명

2.1 DinD 구성 방식

소켓 마운트 방식

DinD 방식

docker run -d \
  --name jenkins-dind \
  --privileged \
  -p 8080:8080 \
  -p 50000:50000 \
  docker:dind

2.2 보안 강화를 위한 권한 제한

# Docker 그룹 권한 제한
sudo chown root:docker /usr/bin/docker
sudo chmod 750 /usr/bin/docker

# Docker 소켓 권한 제한
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock

3. 문제 해결 및 디버깅

3.1 권한 문제 디버깅

# Jenkins 사용자 권한 확인
docker exec jenkins whoami
docker exec jenkins groups

# Docker 소켓 권한 확인
ls -l /var/run/docker.sock

# Docker 명령어 테스트
docker exec jenkins docker ps

3.2 로그 확인

# Jenkins 컨테이너 로그 확인
docker logs jenkins

# Docker 데몬 로그 확인
sudo journalctl -u docker

4. 보안 고려사항

최소 권한 원칙

네트워크 격리

# 전용 네트워크 생성
docker network create jenkins-network

# 네트워크 적용
docker run -d \
  --name jenkins \
  --network jenkins-network \

볼륨 마운트 제한